package com.example.dto;

import com.example.entity.User;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 用户数据传输对象，包含角色信息
 * 用于前端显示完整的用户信息
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDTO {
    
    private Long id;
    private String username;
    private String email;
    private String fullName;
    private String phoneNumber;
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
    private Boolean enabled;
    private String lastLoginIp;
    private LocalDateTime lastLoginTime;
    private String avatarUrl;
    private String examNumber;
    
    /**
     * 用户角色列表
     */
    private List<String> roles;
    
    /**
     * 用户状态描述
     */
    private String statusDescription;
    
    /**
     * 从User实体创建UserDTO
     * @param user 用户实体
     * @param roles 用户角色列表
     * @return UserDTO对象
     */
    public static UserDTO fromUser(User user, List<String> roles) {
        UserDTO dto = new UserDTO();
        dto.setId(user.getId());
        dto.setUsername(user.getUsername());
        dto.setEmail(user.getEmail());
        dto.setFullName(user.getFullName());
        dto.setPhoneNumber(user.getPhoneNumber());
        dto.setCreateTime(user.getCreateTime());
        dto.setUpdateTime(user.getUpdateTime());
        dto.setEnabled(user.getEnabled());
        dto.setLastLoginIp(user.getLastLoginIp());
        dto.setLastLoginTime(user.getLastLoginTime());
        dto.setAvatarUrl(user.getAvatarUrl());
        dto.setExamNumber(user.getExamNumber());
        dto.setRoles(roles);
        
        // 设置状态描述
        dto.setStatusDescription(user.getEnabled() ? "正常" : "已封禁");
        
        return dto;
    }
    
    /**
     * 获取主要角色（用于显示）
     * @return 主要角色名称
     */
    public String getPrimaryRole() {
        if (roles == null || roles.isEmpty()) {
            return "无角色";
        }
        
        // 优先级：ADMIN > TEACHER > MODERATOR > USER
        if (roles.contains("ROLE_ADMIN")) {
            return "管理员";
        } else if (roles.contains("ROLE_TEACHER")) {
            return "教师";
        } else if (roles.contains("ROLE_MODERATOR")) {
            return "版主";
        } else if (roles.contains("ROLE_USER")) {
            return "学生";
        } else {
            return roles.get(0).replace("ROLE_", "");
        }
    }
    
    /**
     * 获取所有角色的中文描述
     * @return 角色描述字符串
     */
    public String getRoleDescriptions() {
        if (roles == null || roles.isEmpty()) {
            return "无角色";
        }
        
        return roles.stream()
                .map(role -> {
                    switch (role) {
                        case "ROLE_ADMIN": return "管理员";
                        case "ROLE_TEACHER": return "教师";
                        case "ROLE_MODERATOR": return "版主";
                        case "ROLE_USER": return "学生";
                        default: return role.replace("ROLE_", "");
                    }
                })
                .reduce((r1, r2) -> r1 + ", " + r2)
                .orElse("无角色");
    }
} 